package displayboardinfo.tests;

import java.net.URI;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;

import displayboardinfo.entities.Patient;
import displayboardinfo.entities.Room;
import displayboardinfo.entities.Visit;
import displayboardinfo.messages.FinishVisitReq;
import displayboardinfo.messages.ListPatientsRes;
import displayboardinfo.messages.ListRoomsRes;
import displayboardinfo.messages.ListVisitsReq;
import displayboardinfo.messages.ListVisitsRes;

public class VisitsServicesTest {
	public static void main(String[] args) throws ParseException, JAXBException {
		ClientConfig config = new DefaultClientConfig();
		Client client = Client.create(config);
		WebResource service = client.resource(getBaseURI());
		
//		SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm");
//		SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
//		Date date = dateFormat.parse("08-05-2012 12:30");
//		Date duration = timeFormat.parse("00:20");
//		
//		ClientResponse res = service.path("patients").path("list").type(MediaType.APPLICATION_XML).get(ClientResponse.class);
//		Patient patient = res.getEntity(ListPatientsRes.class).getPatients().get(0);
//		
//		res = service.path("rooms").path("list").type(MediaType.APPLICATION_XML).get(ClientResponse.class);
//		Room room = res.getEntity(ListRoomsRes.class).getRooms().get(0);
//		
//		Visit req = new Visit();
//		req.setRoom(room);
//		req.setDate(date);
//		req.setDuration(duration);
//		req.setPatient(patient);
//		
////		JAXBContext context = JAXBContext.newInstance(Visit.class);
////		Marshaller m = context.createMarshaller();
////		m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
////		m.marshal(req, System.out);
//		
//		try{
//			res = service.path("visits").path("add").type(MediaType.APPLICATION_XML).post(ClientResponse.class, req);
//			
//			if (res.getStatus() == ClientResponse.Status.NOT_ACCEPTABLE.getStatusCode()){
//				System.err.println("Not acceptable");
//				System.err.println(res.getEntity(String.class));
//			}
//			else {
//				System.out.println(res);
//			}
//			
//		} catch (Exception e){
//			System.err.println("Exception");
//		}
		
		SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
		Date date = dateFormat.parse("11-05-2012");
		
		ClientResponse res = service.path("rooms").path("list").type(MediaType.APPLICATION_XML).get(ClientResponse.class);
		Room room = res.getEntity(ListRoomsRes.class).getRooms().get(0);

		ListVisitsReq visitsReq = new ListVisitsReq();
		visitsReq.setDate(date);
		visitsReq.setRoom(room);
		
		res = service.path("visits").path("list").type(MediaType.APPLICATION_XML).post(ClientResponse.class, visitsReq);
		Visit visit = res.getEntity(ListVisitsRes.class).getVisits().get(0);
		
		try{
//			FinishVisitReq finishReq = new FinishVisitReq();
//			finishReq.setVisit(visit);
			
			res = service.path("visits").path("delete").type(MediaType.APPLICATION_XML).post(ClientResponse.class, visit);
			
			if (res.getStatus() == ClientResponse.Status.NOT_ACCEPTABLE.getStatusCode()){
				System.err.println("Not acceptable");
				System.err.println(res.getEntity(String.class));
			}
			else {
//				System.out.println(res);
			}
			
		} catch (Exception e){
			System.err.println("Exception");
		}
		
//		SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
//		Date date = dateFormat.parse("19-03-2012");
//		
//		ClientResponse res = service.path("rooms").path("list").type(MediaType.APPLICATION_XML).get(ClientResponse.class);
//		Room room = res.getEntity(ListRoomsRes.class).getRooms().get(0);
//
//		ListVisitsReq visitsReq = new ListVisitsReq();
//		visitsReq.setDate(date);
//		visitsReq.setRoom(room);
//		
//		res = service.path("visits").path("list").type(MediaType.APPLICATION_XML).post(ClientResponse.class, visitsReq);
//		Visit visit = res.getEntity(ListVisitsRes.class).getVisits().get(0);
//		
//		visit.setDate(dateFormat.parse("30-03-2012"));
//		
//		
//		try{
//			JAXBContext context = JAXBContext.newInstance(Visit.class);
//			Marshaller m = context.createMarshaller();
//			m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
//			m.marshal(visit, System.out);
//			
//			
//			
//			res = service.path("visits").path("modify").type(MediaType.APPLICATION_XML).post(ClientResponse.class, visit);
//			
//			if (res.getStatus() == ClientResponse.Status.NOT_ACCEPTABLE.getStatusCode()){
//				System.err.println("Not acceptable");
//				System.err.println(res.getEntity(String.class));
//			}
//			else {
////				System.out.println(res);
//			}
//			
//		} catch (Exception e){
//			System.err.println("Exception");
//		}
	
	}
	
	private static URI getBaseURI() {
		return UriBuilder.fromUri(
				"http://localhost:8080/DisplayBoardInfoServer").build();
	}
}
